<?php

/*
 * This file is part of SwiftMailer. (c) 2004-2009 Chris Corbyn For the full copyright and license information, please view the LICENSE file that was distributed with this source code.
 */

/**
 * Processes bytes as they pass through a buffer and replaces sequences in it.
 * 
 * @package Swift
 * @author Chris Corbyn
 */
class Swift_StreamFilters_StringReplacementFilter implements Swift_StreamFilter {
	/**
	 * The needle(s) to search for
	 */
	private $_search;
	
	/**
	 * The replacement(s) to make
	 */
	private $_replace;
	
	/**
	 * Create a new StringReplacementFilter with $search and $replace.
	 * 
	 * @param string|array $search        	
	 * @param string|array $replace        	
	 */
	public function __construct($search, $replace) {
		$this->_search = $search;
		$this->_replace = $replace;
	}
	
	/**
	 * Returns true if based on the buffer passed more bytes should be buffered.
	 * 
	 * @param string $buffer        	
	 * @return boolean
	 */
	public function shouldBuffer($buffer) {
		$endOfBuffer = substr ( $buffer, - 1 );
		foreach ( ( array ) $this->_search as $needle ) {
			if (false !== strpos ( $needle, $endOfBuffer )) {
				return true;
			}
		}
		
		return false;
	}
	
	/**
	 * Perform the actual replacements on $buffer and return the result.
	 * 
	 * @param string $buffer        	
	 * @return string
	 */
	public function filter($buffer) {
		return str_replace ( $this->_search, $this->_replace, $buffer );
	}
}
